Amazon MSKクラスターをCloudFormationで作成してみた
いわさです。
MSKでCloudFormationにて作成出来るリソースの範囲が広がりました。
しかし、そもそもCloudFormationで作成する記事がなかったので本日はベーシックなMSKクラスターを作成してみました。
動作確認用のKafkaクライアント(EC2)も作成します。
テンプレート
以下のリポジトリにテンプレートはおいておきます。
クラスター作成
おそらく最小構成のクラスターです。
ブローカーインスタンスは2以上にする必要があります。
MSKクラスターの作成は時間がかかります。15~20分ほど。
MSKCluster: Type: 'AWS::MSK::Cluster' Properties: BrokerNodeGroupInfo: ClientSubnets: - !Ref PrivateSubnetOne - !Ref PrivateSubnetTwo InstanceType: !Ref BrokerInstanceType SecurityGroups: - !Ref MSKSecurityGroup StorageInfo: EBSStorageInfo: VolumeSize: !Ref BrokerStorageSize ClusterName: HogeCluster KafkaVersion: 2.6.2 EncryptionInfo: EncryptionInTransit: ClientBroker: TLS InCluster: true NumberOfBrokerNodes: !Ref BrokerNum
クライアント作成
EC2クライアントはユーザーデータでKafkaクライアントをセットアップしています。
ユーザーデーター付近だけ抜粋します。
MSKのCloudFromationにクライアント実装のサンプルがあり、そちらをベースに少し記述方法を変更したりしています。
KafkaClientEC2Instance: Type: 'AWS::EC2::Instance' Properties: InstanceType: t3.small KeyName: !Ref KeyPairVM IamInstanceProfile: !Ref EC2InstanceProfile SubnetId: !Ref PrivateSubnetOne ImageId: !Ref ClientAMI UserData: Fn::Base64: | #cloud-config package_update: true package_upgrade: true runcmd: - amazon-linux-extras enable corretto8 - yum update -y - yum install python3.7 -y - yum install java-1.8.0-amazon-corretto -y - yum erase awscli -y - cd /home/ec2-user - echo "export PATH=.local/bin:$PATH" >> .bash_profile - mkdir kafka - mkdir mm - cd kafka - wget https://archive.apache.org/dist/kafka/2.6.2/kafka_2.12-2.6.2.tgz - tar -xzf kafka_2.12-2.6.2.tgz - cd /home/ec2-user - wget https://bootstrap.pypa.io/get-pip.py - su -c "python3.7 get-pip.py --user" -s /bin/sh ec2-user - su -c "/home/ec2-user/.local/bin/pip3 install boto3 --user" -s /bin/sh ec2-user - su -c "/home/ec2-user/.local/bin/pip3 install awscli --user" -s /bin/sh ec2-user - chown -R ec2-user ./kafka - chgrp -R ec2-user ./kafka - chown -R ec2-user ./mm - chgrp -R ec2-user ./mm
スタック作成
スタック作成後はMSKクラスターが作成されます。
また、EC2はMSKクライアントをセットアップ済みなので、すぐにトピックへの送信を試すことが可能になっています。
sh-4.2$ sudo su ec2-user [ec2-user@ip-172-31-36-114 bin]$ cd ~/kafka/kafka_2.12-2.6.2/bin [ec2-user@ip-172-31-41-236 bin]$ vi client.properties [ec2-user@ip-172-31-41-236 bin]$ ./kafka-console-producer.sh --broker-list b-1.hogecluster.mss7x7.c3.kafka.ap-northeast-1.amazonaws.com:9094,b-2.hogecluster.mss7x7.c3.kafka.ap-northeast-1.amazonaws.com:9094 --producer.config client.properties --topic HogeTopic >aaa bbb ccc ddd eee
さいごに
クライアントとクラスターのテンプレートを用意しておいて、作成と削除をすぐ出来るようにしておくと、MSKの動作をちょっと確認したいときなどに便利です。
今後MSKを検証するときは、このテンプレートを使おうと思います。